package Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JTextField;

import Modelo.Empleado;
import Modelo.Socio;
import Modelo.Cooperativa;
import Modelo.Terminal;
import Modelo.TipoUnidad;
import Modelo.Unidad;
import Vista.VUnidad;
import Vista.VSocio;
@SuppressWarnings("all")
public class CUnidad implements ActionListener, ItemListener {
	
	private Socio so;
	private Cooperativa co;
	private Unidad uni;
	private VUnidad vuni;
	private VSocio vso;
	private int varBusqueda;
	private CSocio controladorsocio;
	private Terminal ter;

	//Combos de los estados

	
	public CUnidad(Socio so, Cooperativa co, CSocio controladorsocio){
		
		super();
		this.ter = ter;
		this.so = so;
		this.co = co;
		this.controladorsocio = controladorsocio;
		this.uni = new Unidad();
		this.vuni = new VUnidad(this);
		this.vuni.setVisible(true);

		DefinirSocio();
		vuni.getTxtSocio().setEnabled(false);
		vuni.getTxtTipo().setVisible(false);
		vuni.getLbltipo().setVisible(false);
		vuni.getTxtChofer().setVisible(false);
		LLenarCombo();
		LlenarComboChofer(co);
		
		vuni.limpiarTabla();
		
		
	}
	
	private void LLenarCombo() {
		ArrayList<TipoUnidad> tiposunidades = co.getTiposunidades();
		for (int i = 0; i < tiposunidades.size(); i++) {
			vuni.getCmbTipo().addItem(tiposunidades.get(i).getDescripcion());
		} 
	}
	


	//Metodos Para accionar los botones
		@Override
		public void actionPerformed(ActionEvent e) {
		      if(e.getActionCommand().toLowerCase().equals("modificar"))
		      {
		    	  		Modificar();
		      }
		      else if(e.getActionCommand().toLowerCase().equals("guardar"))
		      {
		    	  		Guardar();
		      }else if(e.getActionCommand().toLowerCase().equals("limpiar"))
		      {
		    	  Limpiar();
		      }else if(e.getActionCommand().toLowerCase().equals("eliminar"))
		      {
		    	  Eliminar();
		      }
		      else if(e.getActionCommand().toLowerCase().equals("buscar")){
		    	  Buscar();
		      }
		      
		}
		
		public void Modificar(){
			
		}
		
		
		public void Guardar(){
			
			if(validarDatos()){
				Unidad uni = new Unidad();
				uni.setEstatus('A');
				uni.setPlaca(vuni.getTxtCodigo().getText().toString());
				uni.setMarca(vuni.getTxtDescripcion().getText().toString());
				uni.setSocio(co.buscarSocio(vuni.getTxtSocio().getText().toString()));
				uni.setChofer(co.buscarEmpleadoNombre(vuni.getCmbChofer().getSelectedItem().toString()).getCedula());
				uni.setTipounidad(co.buscarTipoUnidadNombre(vuni.getCmbTipo().getSelectedItem().toString()));
		
				so.agregarUnidad(uni);
				JOptionPane.showMessageDialog(null, "Registro Unidad Exitoso", "Guardar Unidad", 1);
				vuni.getTxtCodigo().setText("");
				vuni.getTxtDescripcion().setText("");
				vuni.limpiarTabla();
				llenarTabla();
			}
		}
		

		
		public void Buscar(){
			
			Unidad unidadbuscado;
			if((vuni.getTxtCodigo().getText().equals(""))){
				vuni.mostrarMensaje("Debe llenar el campo codigo para poder buscar");		
			}else if(vuni.getTxtCodigo().getText().toString() != "")
			{
				
				
					String placa = vuni.getTxtCodigo().getText().toString();
					
					if(so.buscarUnidad(placa) == null){
						vuni.mostrarMensajeError("La unida con placa " + placa + " no existe");
					}else{
	
					unidadbuscado = so.buscarUnidad(placa);
					
					vuni.getTxtCodigo().setEnabled(false);
					vuni.getTxtDescripcion().setEnabled(false);
					vuni.getTxtDescripcion().setText(unidadbuscado.getMarca().toString());
					vuni.getTxtSocio().setText(co.buscarSocio(so.getCedula().toString()).getNombre().toString());
					vuni.getTxtChofer().setText(co.buscarEmpleado(unidadbuscado.getChofer().toString()).getNombre());
					vuni.getTxtTipo().setText(unidadbuscado.getTipounidad().getDescripcion());
					
					
					vuni.getCmbTipo().setVisible(false);
					vuni.getTxtTipo().setVisible(true);
					vuni.getLbltipo().setVisible(true);
					vuni.getTxtChofer().setVisible(true);
					vuni.getCmbChofer().setVisible(false);
					
					//vuni.getTxtTipo().setText(unidadbuscado.getTipounidad().getDescripcion());
					vuni.getTxtTipo().setEnabled(false);
					vuni.getTxtChofer().setEnabled(false);
					
					
					vuni.getCmbTipo().setEnabled(false);
					vuni.getBtnGuardar().setEnabled(false);
					vuni.getBtnBuscar().setEnabled(false);
					varBusqueda = 1;
					
					if(unidadbuscado.getEstatus() == 'I'){
						vuni.mostrarMensaje("La unidad " + unidadbuscado.getPlaca() + " posee una multa");
					}
					}
				
				

			}
			

		}
		
		public void Eliminar(){
			
		}
		
		public void Limpiar(){
			
			//pone los campos de texto en blanco
			vuni.getTxtCodigo().setText("");
			vuni.getTxtDescripcion().setText("");
			vuni.getTxtChofer().setText("");
			
			
			//habilita todos los botones
			vuni.getBtnBuscar().setEnabled(true);
			vuni.getBtnEliminar().setEnabled(true);
			vuni.getBtnModificar().setEnabled(true);
			vuni.getBtnGuardar().setEnabled(true);
			
			//habilita todos los campos de texto
			
			vuni.getTxtCodigo().setEnabled(true);
			vuni.getTxtDescripcion().setEnabled(true);
			
			//pone visible el combobox tipo
			vuni.getCmbTipo().setVisible(true);
			vuni.getCmbTipo().setEnabled(true);
			
			//pone invisible el txttipo y el lbltipo
			
			vuni.getTxtTipo().setText("");
			vuni.getTxtTipo().setVisible(false);
			vuni.getLbltipo().setVisible(false);
			vuni.getTxtChofer().setVisible(false);
			vuni.getCmbChofer().setVisible(true);
			
			varBusqueda = 0;

		}
		
		//metodo para limpiar los campos de texto
		
		public boolean validarDatos(){
			if(vuni.getTxtCodigo().getText().toString().equalsIgnoreCase("")){
				vuni.mostrarMensaje("Debe ingresar la placa de la Unidad");
				return false;
			}else if (vuni.getTxtDescripcion().getText().toString().equalsIgnoreCase("")){
				vuni.mostrarMensaje("Debe ingresar la marca de la Unidad");
				return false;
			}else if (vuni.getTxtSocio().getText().toString().equalsIgnoreCase("")){
				vuni.mostrarMensaje("Debe ingresar el socio de la Unidad");
	
				return false;
			}else if (so.buscarUnidad(vuni.getTxtCodigo().getText().toString()) != null){
				vuni.mostrarMensaje("Ya la unidad con placa " + vuni.getTxtCodigo().getText().toString() + " existe ");
				return false;
			}else if (vuni.getCmbChofer().getSelectedItem().toString().equalsIgnoreCase("Seleccione un chofer")){
				vuni.mostrarMensaje("Debe seleccionar un chofer de la  unidad ");
				return false;
			}
			
			else if (vuni.getCmbTipo().getSelectedItem().toString()== "Seleccione una Opcion"){
				vuni.mostrarMensaje("Debe seleccionar un tipo de unidad ");
				return false;
				
			}
			
			return true; //en caso de que esten llenos los campos
			
		}
		
		public void DefinirSocio(){
			
			vuni.getTxtSocio().setText(co.buscarSocio(so.getCedula().toString()).getNombre().toString());
			
		}
		
		@SuppressWarnings("static-access")
		@Override
		public void itemStateChanged(ItemEvent e) {
			if (e.getStateChange() == e.SELECTED) {
				if (e.getSource().equals(vuni.getCmbChofer())){
					
					
				}
			}
			
		}
		
		public void LlenarComboChofer(Cooperativa co){
		
			ArrayList<Empleado> choferes = co.getEmpleados();
			for (int i = 0; i < choferes.size(); i++) {
				if(choferes.get(i).getTipo().toLowerCase().equalsIgnoreCase("chofer")){
					vuni.getCmbChofer().addItem(choferes.get(i).getNombre());
				}
			} 
			
	}
		
		public void llenarTabla() {
			

			

			for (int k = 0; k < so.contarUnidades(); k++) {
					
		
						Vector<String> datos = new Vector<String>(2, 1);
						
						
						String placa = so.obtenerUnidad(k).getPlaca();
						String marca = so.obtenerUnidad(k).getMarca();
						String tipo = so.obtenerUnidad(k).getTipounidad().getDescripcion();
		
						datos.add(placa);
						datos.add(marca);
						datos.add(tipo);
						vuni.agregarFilaTblUnidad(datos);
						
			
					
						
					
			}
			
			
			
		}
		
		
	
}
